package com.doitedu.mr.day06.yarn;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * @Date 2021/12/1
 * @Created by HANGGE
 * @Description TODO
 */
public class Driver {
    public static void main(String[] args) throws Exception {
        System.setProperty("HADOOP_USER_NAME" ,"root") ;
        // Job  统计文件中单词出现的次数
        Configuration conf = new Configuration();
        // 一 设置提交的运行模式    默认是本地
        conf.set("mapreduce.framework.name","yarn");
        // 二  yarn 主节点的地址
        conf.set("yarn.resourcemanager.hostname", "linux01");
        // 三 处理HDFS的数据
//
        // 四 跨平台参数
        conf.set("mapreduce.app-submission.cross-platform","true");
        // 1  创建 JOB
        Job job = Job.getInstance(conf, "wordcount");
        // 五 设置自己成的jar包
        job.setJar("d://wc.jar");
        // 1) Mapper 类
        job.setMapperClass(WordCountMapper.class);
        // 2) Reducer类
        job.setReducerClass(WordCountReducer.class);
        // 3)  设置map输出的数据类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        // 4)  设置reduce输出的数据类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
       /*
        job.setCombinerClass();
        job.setPartitionerClass();
        job.setInputFormatClass();
        job.setOutputFormatClass();
        */

      //  job.setNumReduceTasks(2);
        /**
         * 处理HDFS上的海量数据
         */
        // 5) 设置输入的数据路径
        FileInputFormat.setInputPaths(job , new Path("/data/wc/"));
        // 6) 设置输出的结果保存路径
        FileOutputFormat.setOutputPath(job, new Path("/data/wc_res3/"));
        // 2 提交工作
        // 等待执行完成 , 打印执行过
        job.waitForCompletion(true) ;

    }
}
